group { name: "e/deskmirror/frame/default";
   alias: "e/deskmirror/frame/dialog";
   alias: "e/deskmirror/frame/urgent";
   alias: "e/deskmirror/frame/sparkle";
   images.image: "pager_mini_win_shadow.png" COMP;
   script {
      public message(Msg_Type:type, id, ...) {
         if ((type == MSG_FLOAT) && (id == 0)) {
            new Float:sc = getfarg(2);

            custom_state(PART:"top_spacer", "default", 0.0);
            set_state_val(PART:"top_spacer", STATE_REL2, 1.0, sc);
            set_state(PART:"top_spacer", "custom", 0.0);
         }
      }
   }
   parts {
      part { name: "spacer"; type: SPACER;
         description { state: "default";
         }
         description { state: "iconic";
            inherit: "default" 0.0;
            rel1.relative: 0.0 1.0;
            rel2.relative: 0.0 1.0;
         }
      }
      part { name: "top_spacer"; type: SPACER;
         description { state: "default" 0.0;
            rel1.to: "spacer";
            rel2.to_x: "spacer";
            rel2.to_y: "e.text.title";
            rel2.offset: -1 -4;
            align: 0.5 0.0;
         }
      }
      part { name: "bottom_size"; type: SPACER;
         description { state: "default" 0.0;
            rel1.to_x: "spacer";
            rel1.relative: 0.0 1.0;
            rel1.offset: 0 -1;
            rel2.to: "spacer";
            min: 0 1;
            fixed: 0 1;
         }
         description { state: "hidden" 0.0;
            inherit: "default" 0.0;
            min: 0 0;
            max: 0 0;
         }
      }
      part { name: "shadow";
         mouse_events: 0;
         description { state: "default" 0.0;
            image.normal: "pager_mini_win_shadow.png";
            image.border: 7 7 7 7;
            image.middle: 0;
            rel1.to: "top";
            rel1.offset: -5 -5;
            rel2.to: "bottom";
            rel2.offset: 4 4;
            fill.smooth: 0;
            color_class: "/shadow/normal/border";
         }
         description { state: "off";
            inherit: "default" 0.0;
            visible: 0;
         }
      }

      part { name: "client_clip"; type: RECT;
         description { state: "default" 0.0;
            rel1.to_y: "top";
            rel1.relative: 0.0 1.0;
            rel2.to_y: "bottom";
            rel2.relative: 1.0 0.0;
         }
      }
      part { name: "e.swallow.client"; type: SWALLOW;
         clip_to: "client_clip";
         description { state: "default" 0.0;
            rel1.to_y: "top";
            rel1.relative: 0.0 1.0;
            rel2.to_y: "bottom";
            rel2.relative: 1.0 0.0;
         }
      }

      part { name: "top"; type: RECT;
         description { state: "default" 0.0;
            rel.to: "top_spacer";
            color_class: "/bg/normal/titlebar";
            min: 0 1;
         }
         description { state: "focused" 0.0;
            inherit: "default" 0.0;
            color_class: "/bg/selected/titlebar";
         }
      }

      part { name: "e.text.title"; type: TEXT; mouse_events: 0;
         scale: 1;
         description { state: "default" 0.0;
            rel.to: "spacer";
            rel1.offset: 1 3;
            rel2.relative: 1.0 0.0;
            rel2.offset: -2 3;
            align: 0.5 0.0;
            color_class: "/fg/normal/titlebar";
            text { font: FNBD; size: 10;
               text_class: "title_bar";
               align: 0.5 0.0;
               min: 0 1;
            }
            visible: 0;
            fixed: 0 1;
         }
         description { state: "focused" 0.0;
            inherit: "default" 0.0;
            color_class: "/fg/selected/titlebar";
         }
      }

      part { name: "bottom"; type: RECT; mouse_events: 0;
         description { state: "default" 0.0;
            rel.to: "bottom_size";
            color_class: "/bg/normal/border";
         }
         description { state: "hidden" 0.0;
            inherit: "default" 0.0;
            max: 0 0;
            visible: 0;
         }
      }

      part { name: "clone"; type: PROXY; mouse_events: 0;
         description { state: "default";
            source: "e.swallow.client";
            rel.to: "e.swallow.client";
            visible: 0;
            color: 255 255 255 0; // no cc
            proxy.source_clip: 0;
         }
         description { state: "urgent1";
            inherit: "default" 0.0;
            visible: 1;
            color: 255 255 255 255; // no cc
            proxy.source_clip: 0;
         }
         description { state: "urgent2" 0.0;
            inherit: "default" 0.0;
            visible: 1;
            rel1.relative: -2.0  -2.0;
            rel2.relative: 3.0  3.0;
            color: 255 255 255 0; // no cc
            proxy.source_clip: 0;
         }
      }
   }
   programs {
      program { signal: "e,state,urgent"; source: "e";
         action: ACTION_STOP;
         target: "go_big";
         target: "go_big2";
         after: "go_big";
      }
      program { name: "go_big";
         action: STATE_SET "urgent1" 0.0;
         target: "clone";
         after: "go_big2";
      }
      program { name: "go_big2";
         action: STATE_SET "urgent2" 0.0;
         transition: LINEAR 0.5 USE_DURATION_FACTOR 1;
         target: "clone";
         after: "go_big";
      }
      program { signal: "e,state,not_urgent"; source: "e";
         action: ACTION_STOP;
         target: "go_big";
         target: "go_big2";
         after: "go_hid";
      }
      program { name: "go_hid";
         action: STATE_SET "default" 0.0;
         transition: LINEAR 0.5 USE_DURATION_FACTOR 1;
         target: "clone";
      }
      program { signal: "e,state,shadow,on"; source: "e";
         action: STATE_SET "default" 0.0;
         target: "shadow";
      }
      program { signal: "e,state,shadow,off"; source: "e";
         action: STATE_SET "off" 0.0;
         target: "shadow";
      }
      program { signal: "e,state,focused"; source: "e";
         action: STATE_SET "focused" 0.0;
         target: "e.text.title";
         target: "top";
      }
      program { signal: "e,state,unfocused"; source: "e";
         action: STATE_SET "default" 0.0;
         target: "e.text.title";
         target: "top";
      }
      program { signal: "e,state,shaded"; source: "e";
         action: STATE_SET "hidden" 0.0;
         target: "bottom";
      }
      program { signal: "e,state,maximize*"; source: "e";
         action: STATE_SET "hidden" 0.0;
         target: "bottom";
      }
      program { signal: "e,state,unmaximize*"; source: "e";
         after: "unshade";
      }
      program { signal: "e,state,unshaded"; source: "e";
         after: "unshade";
      }
      program { name: "unshade";
         signal: "e,state,unshading"; source: "e";
         action: STATE_SET "default" 0.0;
         target: "bottom";
      }
      program { name: "iconify";
         action: STATE_SET "iconic" 0.0;
         transition: ACCELERATE 0.2 CURRENT USE_DURATION_FACTOR 1;
         target: "spacer";
      }
      program { name: "uniconify";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2 CURRENT USE_DURATION_FACTOR 1;
         target: "spacer";
      }
      program { signal: "e,action,uniconify"; source: "e";
         action: ACTION_STOP;
         target: "iconify";
         after: "uniconify";
      }
      program { signal: "e,action,iconify"; source: "e";
         action: ACTION_STOP;
         target: "uniconify";
         after: "iconify";
      }
   }
}

group { name: "e/deskmirror/frame/noresize";
   inherit: "e/deskmirror/frame/default";
   parts {
      part { name: "e.swallow.client"; type: SWALLOW;
         description { state: "default" 0.0;
            rel2.relative: 1.0 1.0;
         }
      }
      part { name: "bottom"; type: RECT;
         description { state: "default" 0.0;
            color_class: "/bg/normal/border";
            rel1.relative: 0.0 1.0;
            rel1.offset: 0 -1;
            rel2.relative: 1.0 1.0;
            min: 0 0;
            max: 0 0;
            fixed: 0 1;
            visible: 0;
         }
      }
   }
}

group { name: "e/deskmirror/frame/noresize_dialog";
   inherit: "e/deskmirror/frame/default";
   parts {
      part { name: "e.swallow.client"; type: SWALLOW;
         description { state: "default" 0.0;
            rel2.relative: 1.0 1.0;
         }
      }
      part { name: "bottom"; type: RECT;
         description { state: "default" 0.0;
            color_class: "/bg/normal/border";
            rel1.relative: 0.0 1.0;
            rel1.offset: 0 -1;
            rel2.relative: 1.0 1.0;
            min: 0 0;
            max: 0 0;
            fixed: 0 1;
            visible: 0;
         }
      }
   }
}

group { name: "e/deskmirror/frame/pixel";
   parts {
      part { name: "client_clip"; type: RECT;
         description { state: "default" 0.0;
            rel.to: "e.swallow.client";
         }
      }
      part { name: "frame"; type: RECT;
         description { state: "default" 0.0;
            color_class: "/bg/normal/border/outline";
         }
         description { state: "focused" 0.0;
            inherit: "default" 0.0;
            color_class: "/bg/selected/border/outline";
         }
      }
      part { name: "e.swallow.client"; type: SWALLOW;
         clip_to: "client_clip";
         description { state: "default" 0.0;
            rel1.offset: 1 1;
            rel2.offset: -2 -2;
         }
      }
   }
   programs {
      program { signal: "e,state,focused"; source: "e";
         action: STATE_SET "focused" 0.0;
         target: "frame";
      }
      program { signal: "e,state,unfocused"; source: "e";
         action: STATE_SET "default" 0.0;
         target: "frame";
      }
   }
}

group { name: "e/deskmirror/frame/tiling";
   parts {
      part { name: "client_clip"; type: RECT;
         description { state: "default" 0.0;
            rel.to: "e.swallow.client";
         }
      }
      part { name: "frame"; type: RECT;
         description { state: "default" 0.0;
            color: 0 0 0 0; // no cc
            rel1.offset: -1 -1;
            rel2.offset: 0 0;
            color_class: "/bg/selected/border/outline";
            color: 255 255 255 0; // no cc
         }
         description { state: "focused" 0.0;
            inherit: "default" 0.0;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "e.swallow.client"; type: SWALLOW;
         clip_to: "client_clip";
         description { state: "default" 0.0;
         }
      }
   }
   programs {
      program { signal: "e,state,focused"; source: "e";
         action: STATE_SET "focused" 0.0;
         target: "frame";
      }
      program { signal: "e,state,unfocused"; source: "e";
         action: STATE_SET "default" 0.0;
         target: "frame";
      }
   }
}

group { "e/deskmirror/frame/borderless";
   parts {
      spacer { "spacer";
         desc {}
         desc { "iconic";
            rel1.relative: 0.0 1.0;
            rel2.relative: 0.0 1.0;
         }
      }
      rect { "client_clip";
      }
      swallow { "e.swallow.client";
         clip: "client_clip";
      }
      proxy { "clone"; nomouse;
         desc {
            source: "e.swallow.client";
            hid;
            color: 255 255 255 0; // no cc
         }
         desc { "urgent1"; inherit: "default";
            vis;
            color: 255 255 255 255; // no cc
         }
         desc { "urgent2"; inherit: "default";
            vis;
            rel1.relative: -2.0  -2.0;
            rel2.relative: 3.0  3.0;
            color: 255 255 255 0; // no cc
         }
      }
      program { name: "iconify";
         action: STATE_SET "iconic" 0.0;
         transition: ACCELERATE 0.2 CURRENT USE_DURATION_FACTOR 1;
         target: "spacer";
      }
      program { name: "uniconify";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2 CURRENT USE_DURATION_FACTOR 1;
         target: "spacer";
      }
      program { signal: "e,action,uniconify"; source: "e";
         action: ACTION_STOP;
         target: "iconify";
         after: "uniconify";
      }
      program { signal: "e,action,iconify"; source: "e";
         action: ACTION_STOP;
         target: "uniconify";
         after: "iconify";
      }
      program { signal: "e,state,urgent"; source: "e";
         action: ACTION_STOP;
         target: "go_big";
         target: "go_big2";
         after: "go_big";
      }
      program { name: "go_big";
         action: STATE_SET "urgent1" 0.0;
         target: "clone";
         after: "go_big2";
      }
      program { name: "go_big2";
         action: STATE_SET "urgent2" 0.0;
         transition: LINEAR 0.5 USE_DURATION_FACTOR 1;
         target: "clone";
         after: "go_big";
      }
      program { signal: "e,state,not_urgent"; source: "e";
         action: ACTION_STOP;
         target: "go_big";
         target: "go_big2";
         after: "go_hid";
      }
      program { name: "go_hid";
         action: STATE_SET "default" 0.0;
         transition: LINEAR 0.5 USE_DURATION_FACTOR 1;
         target: "clone";
      }
   }
}
